const http=require('http');
const io=require('socket.io');
const url=require('url');
const path=require('path');
const checkout=require(path.resolve(__dirname, './lib/checkout'));
const db=require(path.resolve(__dirname, './lib/db'));

// http 服务器
const server=http.createServer((req, res)=>{});
server.listen(3000, ()=>{console.log('server running at http://localhost:3000');})


// websocket 服务器
const ws=io.listen(server);

const TABLE='user_table';
let sockArr=[];
let contents=[];


ws.on('connection', sock=>{
	sockArr.push(sock);
	let cur_id=null;
	let cur_name=null;
	
	// 注册
	sock.on('reg', (username, password)=>{
		if(!username || !password) {
			sock.emit('reg_res', 1, '用户名或密码不能为空');
		} else if(!checkout['username'](username)) {
			sock.emit('reg_res', 1, '用户名格式错误');
		} else if(!checkout['password'](password)) {
			sock.emit('reg_res', 1, '密码格式错误');
		} else {
			db.query(`SELECT ID FROM ${TABLE} WHERE username=? and password=?`, [username, password], (err, data)=>{
				if(err) {
					sock.emit('reg_res', 1, '服务器出错');
					console.log(err);
				} else {
					if(data.length) {
						sock.emit('reg_res', 1, '此用户已经存在');
					} else {
						// 成功 ==> 插入数据库
						db.query(`INSERT INTO ${TABLE}(username, password, online) VALUES(?,?,?)`, [username, password, 0], (err, data)=>{
							if(err) {
								sock.emit('reg_res', 1, '服务器出错');
								console.log(err);
							} else {
								sock.emit('reg_res', 0, '注册成功');
							}
						})
					}
				}
			})
		}
	});
	
	// 登录
	sock.on('login', (username, password)=>{
		if(!username || !password) {
			sock.emit('login_res', 1, '用户名或密码不能为空');
		} else if(!checkout['username'](username)) {
			sock.emit('login_res', 1, '用户名格式错误');
		} else if(!checkout['password'](password)) {
			sock.emit('login_res', 1, '密码格式错误');
		} else {
			db.query(`SELECT ID FROM ${TABLE} WHERE username=? and password=?`, [username, password], (err, data)=>{
				if(err) {
					sock.emit('login_res', 1, '服务器出错');
					console.log(err);
				} else {
					if(!data.length) {
						sock.emit('login_res', 1, '此用户不存在');
					} else {
						// 登录成功 ==> 修改 online 状态
						
						db.query(`UPDATE ${TABLE} SET online=? WHERE ID=?`, [1, data[0].ID], err=>{
							if(err) {
								sock.emit('login_res', 1, '服务器出错');
								console.log(err);
							} else {
								cur_id=data[0].ID;
								sock.emit('login_res', 0, '登录成功');
							}
						})
					}
				}
			})
		}
	});
	
	
	// 发送消息 ==> 消息进来，还要转发给其他的 sock
	sock.on('send', (name, message)=>{
		if(!name || !message.trim()) {
			sock.emit('send_res', 1, '发送内容不能为空');
		} else {
			sock.emit('send_res', 0, 'ok!');
			sockArr.forEach(item=>{
				if(item==sock) return;
				item.emit('send', name, message);
			})
		}
		
		
	});
	
	

	// 断开连接 ==> online 设置为0
	sock.on('disconnect', ()=>{
		db.query(`UPDATE ${TABLE} SET online=? WHERE ID=?`, [0, cur_id], err=>{
			if(err) {
				console.log('断开连接失败了');
			} else {
				console.log('断开连接成功');
			}
		})
		sockArr = sockArr.filter(item=>item!=sock);
		
	});

});